package com.proyecto.core.vista.echo.componentes;

import java.util.ArrayList;
import java.util.EventListener;
import java.util.List;
import java.util.ResourceBundle;

import javax.servlet.ServletContext;

import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.RadioButton;
import nextapp.echo2.app.ResourceImageReference;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.button.ButtonGroup;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.layout.ColumnLayoutData;
import nextapp.echo2.app.layout.RowLayoutData;
import nextapp.echo2.app.list.DefaultListModel;
import nextapp.echo2.webcontainer.command.BrowserOpenWindowCommand;

import com.proyecto.core.Utilidades.UtilReflect;
import com.proyecto.core.modelo.beans.CatalogoBean;
import com.proyecto.core.modelo.echo.constantes.ParametrosIniciales;
import com.proyecto.core.modelo.echo.constantes.TipoBusqueda;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.catalogo.ServicioCatalogoXml;
import com.proyecto.core.modelo.servicio.interfaces.IServicioTransaccion;
import com.proyecto.core.vista.echo.base.BotonInfoSistema;
import com.proyecto.core.vista.echo.constantes.MensajeTipo;
import com.proyecto.core.vista.echo.localizador.ServiceLocator;

import echopointng.table.PageableSortableTable;
import echopointng.table.SortableTableModel;
import nextapp.echo2.app.Label;

@SuppressWarnings("serial")
public class WPCatalogo extends WindowPane {

	private static final long serialVersionUID = -4253484031274270476L;

	private Row rwCriterios = new Row();
	
	private RowLayoutData rbLayoutData = new RowLayoutData();

	private Row rwBusqueda =  new Row();

	private Row rwTabla = new Row();

	private ArrayList listaPropiedadesDto;

	private ArrayList listaCriterios;

	private ArrayList listaTitulosTabla;

	private ArrayList listaCamposTabla;
	
	private CatalogoBean cb;
	
	private ButtonGroup bg = new ButtonGroup();

	private TextField txtBusqueda;

	private RadioButton rb;
	
	private Button btnBuscar;
	
	private PageableSortableTable pst;
	
	private List lista;
	
	private IServicioTransaccion ista;
	
	private PSTabla gt;
	
	private ResourceBundle resourceBundle;
	
	private int tipoBusqueda =0;
	
	private ServicioCatalogoXml mxml;
	
	private Object[] parametros = null;
		
	private boolean busquedaConUpper = true;
	
	private String catalogoBusqueda;
	
	private int condicionFiltro = 0;
	
	protected ApplicationInstance ai = ApplicationInstance.getActive();	
	
	public void addActionListener(ActionListener l) {
        getEventListenerList().addListener(ActionListener.class, l);
    }
	
	private ActionListener oyenteDeTabla = new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			getParent().remove(WPCatalogo.this);
			EventListener[] listeners = getEventListenerList().getListeners(ActionListener.class);
            Object o = gt.ManejaEvento(e);
            ActionEvent outgoingEvent = new ActionEvent(o, "Evento");
           
            for (int i = 0; i < listeners.length; ++i) {
                ((ActionListener) listeners[i]).actionPerformed(outgoingEvent);
            }
        }
	};
	
	private ActionListener ListenerBotonInfoSistema = new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			ai.enqueueCommand(new BrowserOpenWindowCommand("ayudasOnline/"+btnInfoSistema.getCp()+"/"+btnInfoSistema.getCp()+".htm", "Ayuda", "width=600,height=450"));
        }
	};

	private BotonInfoSistema btnInfoSistema;

	private SelectField cbFiltro;

	private Button btnAtras;

	private Button btnAdelante;
	
	private int totalRegistros;
	
	private int totalPaginas;
	
	private int paginaActual = 1;
	
	private int registrosXPagina = ParametrosIniciales.CATALOGO_FILAS_X_PAGINA;

	private TextField txtPaginaActual;

	private Row rowPaginacion;

	private Button btnUlitmo;

	private Button btnPrimero;
	
	/**
	 * Por defecto el alto es de 400 PX
	 * */
	public void ajustarAncho(int ancho){
		this.setWidth(new Extent(ancho, Extent.PX));
	}
	
	/**
	 * Por defecto el alto es de 400 PX
	 * @param alto
	 */
	public void ajustarAlto(int alto){
		this.setHeight(new Extent(alto,Extent.PX));
	}
	
	public WPCatalogo(String ArchivoCatalogo, String catalogo, ServiceLocator slp, Object ... parametros){
		this.catalogoBusqueda = catalogo;
		this.parametros = parametros;
		
		mxml = (ServicioCatalogoXml) slp.getBean(ArchivoCatalogo);
		mxml.inicializarCatalogo(catalogo);
		CatalogoBean cb = mxml.getCb();
		
		
		IServicioTransaccion servicio =(IServicioTransaccion) slp.getBean(cb.getServicioNombre());
		
		Inicializar(cb,servicio);
		if(cb.isInicializado()){
			RealizarBusqueda(null);
		}
		
		btnInfoSistema.inicializar(this.getClass().getName(),
								   catalogo,"");
		btnInfoSistema.addActionListener(ListenerBotonInfoSistema);
		rowPaginacion.setVisible(ParametrosIniciales.CATALOGO_PAGINABLE&&cb.isInicializado());
	}
	
	/**
	 * Metodo para pocos datos que se prefiltras segun una lista de objetos
	 * @param ArchivoCatalogo
	 * @param catalogo
	 * @param listaPojos
	 */
	public WPCatalogo(String ArchivoCatalogo, String catalogo, List<Object> listaPojos){
		this.catalogoBusqueda = catalogo;
		try {
			ServiceLocator  serviceLocator  = new ServiceLocator((ServletContext) UtilReflect.invocarMetodo(ai, "getServletContext", null, null));
			mxml = (ServicioCatalogoXml) serviceLocator.getBean(ArchivoCatalogo);
		} catch (Exception e) {e.printStackTrace();}
		
		mxml.inicializarCatalogo(catalogo);
		CatalogoBean cb = mxml.getCb();

		Inicializar(cb,null);
		gt = new PSTabla();
		for (int i = 0; i < listaTitulosTabla.size(); i++) {
			gt.incluirCampo(listaTitulosTabla.get(i).toString(), listaCamposTabla.get(i).toString());
		}
		PageableSortableTable tx1 =gt.generarTabla();
		lista = listaPojos;
		tx1 = gt.cargarTabla(lista);
		rwTabla.add(tx1);
		tx1.addActionListener(oyenteDeTabla);
		
		btnInfoSistema.inicializar(this.getClass().getName(),
								   catalogo,"");
		btnInfoSistema.addActionListener(ListenerBotonInfoSistema);
		rowPaginacion.setVisible(false);
	}

	
	public  void Inicializar(CatalogoBean catalogoBean, IServicioTransaccion ista){
		initComponents();
		cb = catalogoBean;
		DefaultListModel dlm = new DefaultListModel();
		/*Tomar estos valores de un .properties*/
		dlm.add("Empiece por");
		dlm.add("Contiene  a");
		dlm.add("Igual  a");
		cbFiltro.setModel(dlm);
		
		cbFiltro.setSelectedIndex(cb.getPosicionFiltrado());	
		
		
		
		rbLayoutData.setInsets(new Insets(new Extent(15, Extent.PX),new Extent(0, Extent.PX),
				new Extent(15, Extent.PX),new Extent(0, Extent.PX)));
		this.ista = ista;
		
		this.setTitle(cb.getTitulo());
		asignarStyle();
		
		listaPropiedadesDto = cb.getCriteriosValorDto();
		listaCriterios = cb.getCriteriosValorMotrar();
		listaTitulosTabla = cb.getTitulosTabla();
		listaCamposTabla = cb.getCamposTabla();
		
		armarCriterios(listaCriterios);
		ApplicationInstance.getActive().setFocusedComponent(txtBusqueda);
		condicionFiltro = cb.getCondicionFiltro();
		
	}
	
	public void armarCriterios(ArrayList al){
		for (int i = 0; i < al.size(); i++) {
			rb = new RadioButton(al.get(i).toString());
			if (i == 0) 
				rb.setSelected(true);
			rb.setId(listaPropiedadesDto.get(i).toString());
			rb.setLayoutData(rbLayoutData);
			rb.setGroup(bg);
			rwCriterios.add(rb);
	
		}
	}

	private void RealizarBusqueda(ActionEvent e) {
		Component[] c =   rwCriterios.getComponents();
		for (int i = 0; i < c.length; i++ ) {
			if(((RadioButton) c[i]).isSelected()){
				pst = generarTabla(((RadioButton)c[i]).getId());
				((SortableTableModel)pst.getModel()).sortByColumn(cb.getCampoOrdenabe(), cb.getDirectivaOrdenamiento());
				if(pst!=null){
					if(rwTabla.getComponentCount()>0){
						rwTabla.removeAll();
					}
					rwTabla.add(pst);
				}else{
				}
			}
		}
		rowPaginacion.setVisible(ParametrosIniciales.CATALOGO_PAGINABLE);
		txtPaginaActual.setText(paginaActual+"/"+totalPaginas);
	}
	
	public void tipoBusqueda(){
		int i = cbFiltro.getSelectedIndex();
		switch (i){
			case 0:
				tipoBusqueda= TipoBusqueda.LIKE_EMPIECE_POR;
				break;
			case 1:
				tipoBusqueda= TipoBusqueda.LIKE_CONTENGA_A;
				break;
			case 2:
				tipoBusqueda= TipoBusqueda.OPE_IGUAL;

				break;
			default:
				tipoBusqueda = TipoBusqueda.LIKE_EMPIECE_POR;
		}
			
	}
	
	public PageableSortableTable generarTabla(String atr){
		tipoBusqueda();
		long cantidad =-1;
		gt = new PSTabla();
		for (int i = 0; i < listaTitulosTabla.size(); i++) {
			gt.incluirCampo(listaTitulosTabla.get(i).toString(), listaCamposTabla.get(i).toString());
		}
		PageableSortableTable tx1 =gt.generarTabla();
		try {
			String[] atributo = null;
			Object[] valor = null;
			if(cb.getCriteriosAdicionales()!=null && cb.getCriteriosAdicionales().size() > 0){
				atributo = new String[cb.getCriteriosAdicionales().size()+1];
				valor = new Object[cb.getCriteriosAdicionales().size()+1]; //TODO estaba string...
				for(int i =0 ; i< cb.getCriteriosAdicionales().size();i++){
					atributo[i] =cb.getCriteriosAdicionales().get(i);
					valor[i] = parametros[i];
				}
				atributo[cb.getCriteriosAdicionales().size()] = atr;
				valor[cb.getCriteriosAdicionales().size()] = txtBusqueda.getText();
			}else{
				atributo = new String[]{atr};
				
				if(this.catalogoBusqueda.equalsIgnoreCase("CatalogoPersonas")){
					valor =new Object[]{(txtBusqueda.getText().toUpperCase())};
				}else{
					valor =new Object[]{(txtBusqueda.getText())};
				}
				
			}
			cb.setTempAtributos(atributo);
			cb.setTempValores(valor);
			
			if (cb.getMaxCount()!=-1 && !ParametrosIniciales.CATALOGO_PAGINABLE){
				if(this.condicionFiltro == 0){
					cantidad = ista.buscarMaxCount(atributo, valor, tipoBusqueda);
				}else{
					if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
						cantidad = ista.buscarMaxCountEspecialMedicamento(atributo, valor, this.condicionFiltro, tipoBusqueda);
					}else{	
						cantidad = ista.buscarMaxCount(atributo, valor, this.condicionFiltro, tipoBusqueda);
					}
						
				}
				System.out.println("cantidad: " + cantidad);
				if(cb.getMaxCount()<cantidad){
					throw new GeneralException("MaxCount");
				}
			}
			
			try{
				if(ParametrosIniciales.CATALOGO_PAGINABLE){

					if(this.condicionFiltro == 0){
						totalRegistros = ista.buscarCatalogoPorPropiedadCount(atributo, valor, tipoBusqueda);
					}else{
						if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
							totalRegistros = ista.buscarCatalogoPorPropiedadCountEspecialMedicamento(atributo, valor, tipoBusqueda, this.condicionFiltro );
						}else{
							totalRegistros = ista.buscarCatalogoPorPropiedadCount(atributo, valor, tipoBusqueda, this.condicionFiltro );	
						}
							
					}
					
					this.totalPaginas = (totalRegistros%registrosXPagina==0)?totalRegistros/registrosXPagina:(totalRegistros/registrosXPagina)+1;
					int limiteInferior = 0;
					int limiteSuperior = limiteInferior+registrosXPagina;
					this.paginaActual =1;
					if(this.condicionFiltro == 0){
						lista = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, limiteInferior, limiteSuperior, tipoBusqueda,busquedaConUpper);
					}else{
						if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
							lista = ista.buscarCatalogoPorPropiedadPorRangosEspecialMedicamento(atributo, valor, limiteInferior, limiteSuperior, tipoBusqueda, this.condicionFiltro, busquedaConUpper);	
						}else{
							lista = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, limiteInferior, limiteSuperior, tipoBusqueda, this.condicionFiltro, busquedaConUpper);
						}
							
					}
						
											
						
				}else{
					rowPaginacion.setVisible(false);
					lista = ista.buscarCatalogoPorPropiedad(atributo,valor,tipoBusqueda,busquedaConUpper);// ver lo de persona
				}
					
			}catch (Exception e) {
//				e.printStackTrace();
				System.err.println("generarTabla.e." + e.getMessage());
				
			}
			System.out.println("lista.size(): " + lista.size());
			tx1 = gt.cargarTabla(lista);
			tx1.addActionListener(oyenteDeTabla);
		} catch (GeneralException e) {
			String mensaje =null;
			if(e.getClaveMensaje().equalsIgnoreCase("MaxCount")){
				mensaje = resourceBundle.getString("CoreVista.DialogoMensajes.Mensaje.MaxCount")+"\n"
				+ resourceBundle.getString("CoreVista.DialogoMensajes.Mensaje.MaxCount.RegistrosCont")+ " "+cantidad+"\n"
				+ resourceBundle.getString("CoreVista.DialogoMensajes.Mensaje.MaxCount.RegistrosPer")+" "+cb.getMaxCount()+"\n"
				+ resourceBundle.getString("CoreVista.DialogoMensajes.Mensaje.MaxCount.IntenteDeNuevo");
			}else{
				mensaje =mxml.getMensajes().getString(e.getClaveMensaje());
			}
			DialogoMensajes m = null;
			m = new DialogoMensajes(resourceBundle.getString("CoreVista.DialogoMensajes.Titulo.Error"),
			mensaje,MensajeTipo.ALERTA);
			ApplicationInstance.getActive().getDefaultWindow().getContent().add(m);
			ApplicationInstance.getActive().setFocusedComponent(m.getRwBotoneraAceptarCancelar().getBtnAceptar());
		}catch (Exception ex) {
			System.out.println("Catalogo Vacio...");
		}
		return tx1;
	}
	
	public void asignarStyle(){
		setStyleName("OpenLabs.WindowPaneDialogoMensajes");
		setModal(true);
		btnBuscar.setStyleName("OpenLabs.Button.Todos.Default");
	}

	public int getTipoBusqueda() {
		return tipoBusqueda;
	}

	public void setTipoBusqueda(int tipoBusqueda) {
		this.tipoBusqueda = tipoBusqueda;
	}

	public boolean isBusquedaConUpper() {
		return busquedaConUpper;
	}

	public void setBusquedaConUpper(boolean busquedaConUpper) {
		this.busquedaConUpper = busquedaConUpper;
	}

	public Row getRwTabla() {
		return rwTabla;
	}

	public void setRwTabla(Row rwTabla) {
		this.rwTabla = rwTabla;
	}

	public int getRegistrosXPagina() {
		return registrosXPagina;
	}

	public void setRegistrosXPagina(int registrosXPagina) {
		this.registrosXPagina = registrosXPagina;
	}

	private void anterioresAction(ActionEvent e) {
		String [] atributo = cb.getTempAtributos();
		Object [] valor = cb.getTempValores();
		if(paginaActual>1){
			try{
				int totalResultados = 0;
				if(this.condicionFiltro == 0){
					totalResultados = ista.buscarCatalogoPorPropiedadCount(atributo, valor, tipoBusqueda);	
				}else{
					if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
						totalResultados = ista.buscarCatalogoPorPropiedadCountEspecialMedicamento(atributo, valor, this.condicionFiltro, tipoBusqueda);	
					}else{
						totalResultados = ista.buscarCatalogoPorPropiedadCount(atributo, valor, this.condicionFiltro, tipoBusqueda);
					}
						
				}
				
				totalPaginas = (totalResultados%registrosXPagina==0)?totalResultados/registrosXPagina:(totalResultados/registrosXPagina)+1;
				int hasta = paginaActual*registrosXPagina>=totalResultados?//Si estoy en la ultima pagina..
						totalResultados-gt.getList().size():registrosXPagina*(paginaActual-1);
				int desde = hasta - registrosXPagina;
				int totalPaginas = (totalResultados%registrosXPagina==0)?totalResultados/registrosXPagina:(totalResultados/registrosXPagina)+1;
				List resultadosFiltrados = new ArrayList();
				if(this.condicionFiltro == 0){
					resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, tipoBusqueda);
				}else{
					if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangosEspecialMedicamento(atributo, valor, desde, hasta, this.condicionFiltro, tipoBusqueda);
					}else{
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, this.condicionFiltro, tipoBusqueda);	
					}
						
				}
				
				paginaActual--;
				gt.cargarTabla(resultadosFiltrados);
				txtPaginaActual.setText(paginaActual+"/"+totalPaginas);
			}catch (Exception ee) {
				ee.printStackTrace();
			}
		}
	}

	private void siguientesAction(ActionEvent e) {
		String [] atributo = cb.getTempAtributos();
		Object [] valor = cb.getTempValores();
		try{
			//List<Object> resultadosFiltrados = new ArrayList<Object>();
			List resultadosFiltrados = new ArrayList();
			int totalResultados = 0;
			if(this.condicionFiltro == 0){
				totalResultados = ista.buscarCatalogoPorPropiedadCount(atributo, valor, tipoBusqueda);
			}else{
				if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
					totalResultados = ista.buscarCatalogoPorPropiedadCount(atributo, valor, this.condicionFiltro, tipoBusqueda);	
				}else{
					totalResultados = ista.buscarCatalogoPorPropiedadCountEspecialMedicamento(atributo, valor, this.condicionFiltro, tipoBusqueda);
				}
				
			}
			totalPaginas = (totalResultados%registrosXPagina==0)?totalResultados/registrosXPagina:(totalResultados/registrosXPagina)+1;
			if(totalPaginas!=paginaActual){
				int desde = paginaActual*registrosXPagina;
				int hasta = (registrosXPagina*(paginaActual+1))<=totalResultados?
							(registrosXPagina*(paginaActual+1)):totalResultados;
				if(this.condicionFiltro == 0){
					resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, tipoBusqueda);	
				}else{
					if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangosEspecialMedicamento(atributo, valor, desde, hasta, this.condicionFiltro, tipoBusqueda);
					}else{
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, this.condicionFiltro, tipoBusqueda);	
						
					}
					
				}
				
				paginaActual++;
				gt.cargarTabla(resultadosFiltrados);
				txtPaginaActual.setText(paginaActual+"/"+totalPaginas);
			}
		}catch (Exception ee) {
			ee.printStackTrace();
		}
	}

	private void primerosAction(ActionEvent e) {
		if(paginaActual>1){
			String [] atributo = cb.getTempAtributos();
			Object [] valor = cb.getTempValores();
			paginaActual =1;
			try {
				List resultadosFiltrados = new ArrayList();
				if(this.condicionFiltro == 0){
					resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, 0, registrosXPagina, tipoBusqueda);
				}else{
					if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangosEspecialMedicamento(atributo, valor, 0, registrosXPagina, this.condicionFiltro, tipoBusqueda);
					}else{
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, 0, registrosXPagina, this.condicionFiltro, tipoBusqueda);
						
					}
					
				}
				gt.cargarTabla(resultadosFiltrados);
				txtPaginaActual.setText(paginaActual+"/"+totalPaginas);
			} catch (GeneralException ee) {
				ee.printStackTrace();
			}
		}
	}

	private void ultimosAction(ActionEvent e) {
		if(paginaActual<totalPaginas){
			String [] atributo = cb.getTempAtributos();
			Object [] valor = cb.getTempValores();
			try {
				
				//int totalResultados = ista.buscarCatalogoPorPropiedadCount(atributo, valor, tipoBusqueda);
				int totalResultados = 0;
				if(this.condicionFiltro == 0){
					totalResultados = ista.buscarCatalogoPorPropiedadCount(atributo, valor, tipoBusqueda);
				}else{
					if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
						totalResultados = ista.buscarCatalogoPorPropiedadCountEspecialMedicamento(atributo, valor, this.condicionFiltro, tipoBusqueda);	
					}else{
						totalResultados = ista.buscarCatalogoPorPropiedadCount(atributo, valor, this.condicionFiltro, tipoBusqueda);
					}
					
				}
				
				totalPaginas = (totalResultados%registrosXPagina==0)?totalResultados/registrosXPagina:(totalResultados/registrosXPagina)+1;
				int desde = 1+(registrosXPagina*(totalPaginas-1));
				paginaActual = totalPaginas;
				List resultadosFiltrados = new ArrayList();
				if(this.condicionFiltro == 0){
					resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, totalResultados, tipoBusqueda);	
				}else{
					if(this.condicionFiltro == 2 || this.condicionFiltro == 3){
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangosEspecialMedicamento(atributo, valor, desde, totalResultados, this.condicionFiltro, tipoBusqueda);
					}else{
						resultadosFiltrados = ista.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, totalResultados, this.condicionFiltro, tipoBusqueda);
					}
					
				}
				
				gt.cargarTabla(resultadosFiltrados);
				txtPaginaActual.setText(paginaActual+"/"+totalPaginas);
			} catch (GeneralException ee) {
				ee.printStackTrace();
			}
		}
	}

	/**
	 * Configures initial state of component.
	 * WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {
		resourceBundle = ResourceBundle.getBundle(
				"com.proyecto.core.vista.echo.resource.localization.etiquetas",
				ApplicationInstance.getActive().getLocale());
		this.setHeight(new Extent(400, Extent.PX));
		ContentPane contentPane1 = new ContentPane();
		add(contentPane1);
		Column column1 = new Column();
		column1.setStyleName("2OpenLabs.Column.SeparadorInicial");
		contentPane1.add(column1);
		rwCriterios = new Row();
		rwCriterios.setAlignment(new Alignment(Alignment.CENTER,
				Alignment.DEFAULT));
		rwCriterios.setStyleName("2OpenLabs.Row.Datos");
		column1.add(rwCriterios);
		rowPaginacion = new Row();
		ColumnLayoutData rowPaginacionLayoutData = new ColumnLayoutData();
		rowPaginacionLayoutData.setAlignment(new Alignment(Alignment.CENTER,
				Alignment.DEFAULT));
		rowPaginacion.setLayoutData(rowPaginacionLayoutData);
		column1.add(rowPaginacion);
		btnPrimero = new Button();
		ResourceImageReference imageReference1 = new ResourceImageReference(
				"/net/sf/jasperreports/view/images/first.GIF");
		btnPrimero.setIcon(imageReference1);
		btnPrimero.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				primerosAction(e);
			}
		});
		rowPaginacion.add(btnPrimero);
		btnAtras = new Button();
		ResourceImageReference imageReference2 = new ResourceImageReference(
				"/net/sf/jasperreports/view/images/previous.GIF");
		btnAtras.setIcon(imageReference2);
		btnAtras.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				anterioresAction(e);
			}
		});
		rowPaginacion.add(btnAtras);
		Label label1 = new Label();
		label1.setText("Pagina");
		label1.setStyleName("2OpenLabs.Label.Descripcion");
		RowLayoutData label1LayoutData = new RowLayoutData();
		label1LayoutData.setInsets(new Insets(new Extent(5, Extent.PX),
				new Extent(0, Extent.PX), new Extent(5, Extent.PX), new Extent(
						0, Extent.PX)));
		label1.setLayoutData(label1LayoutData);
		rowPaginacion.add(label1);
		txtPaginaActual = new TextField();
		txtPaginaActual.setWidth(new Extent(70, Extent.PX));
		txtPaginaActual.setEnabled(false);
		txtPaginaActual.setStyleName("2OpenLabs.TextField.Descripcion");
		RowLayoutData txtPaginaActualLayoutData = new RowLayoutData();
		txtPaginaActualLayoutData.setAlignment(new Alignment(Alignment.CENTER,
				Alignment.DEFAULT));
		txtPaginaActual.setLayoutData(txtPaginaActualLayoutData);
		rowPaginacion.add(txtPaginaActual);
		btnAdelante = new Button();
		ResourceImageReference imageReference3 = new ResourceImageReference(
				"/net/sf/jasperreports/view/images/next.GIF");
		btnAdelante.setIcon(imageReference3);
		RowLayoutData btnAdelanteLayoutData = new RowLayoutData();
		btnAdelanteLayoutData.setInsets(new Insets(new Extent(5, Extent.PX),
				new Extent(0, Extent.PX), new Extent(0, Extent.PX), new Extent(
						0, Extent.PX)));
		btnAdelante.setLayoutData(btnAdelanteLayoutData);
		btnAdelante.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				siguientesAction(e);
			}
		});
		rowPaginacion.add(btnAdelante);
		btnUlitmo = new Button();
		ResourceImageReference imageReference4 = new ResourceImageReference(
				"/net/sf/jasperreports/view/images/last.GIF");
		btnUlitmo.setIcon(imageReference4);
		btnUlitmo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ultimosAction(e);
			}
		});
		rowPaginacion.add(btnUlitmo);
		rwBusqueda = new Row();
		rwBusqueda.setStyleName("2OpenLabs.Row.Datos");
		ColumnLayoutData rwBusquedaLayoutData = new ColumnLayoutData();
		rwBusquedaLayoutData.setAlignment(new Alignment(Alignment.CENTER,
				Alignment.DEFAULT));
		rwBusqueda.setLayoutData(rwBusquedaLayoutData);
		column1.add(rwBusqueda);
		cbFiltro = new SelectField();
		cbFiltro.setStyleName("2OpenLabs.SelectField.Default");
		rwBusqueda.add(cbFiltro);
		txtBusqueda = new TextField();
		txtBusqueda.setWidth(new Extent(120, Extent.PX));
		txtBusqueda.setStyleName("2OpenLabs.TextField.Campo");
		rwBusqueda.add(txtBusqueda);
		btnBuscar = new Button();
		btnBuscar.setText(resourceBundle
				.getString("CoreVista.base.RowBotonera.Buscar"));
		ResourceImageReference imageReference5 = new ResourceImageReference(
				"/com/proyecto/core/vista/echo/resource/image/icon/general/Iconos/magnifier.png");
		btnBuscar.setIcon(imageReference5);
		btnBuscar.setToolTipText(resourceBundle
				.getString("CoreVista.Button.Tooltip.Buscar"));
		btnBuscar.setStyleName("2OpenLabs.Button.Transaccion");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				RealizarBusqueda(e);
			}
		});
		rwBusqueda.add(btnBuscar);
		btnInfoSistema = new BotonInfoSistema();
		btnInfoSistema.setStyleName("2OpenLabs.Button.Informacion");
		rwBusqueda.add(btnInfoSistema);
		Row row1 = new Row();
		row1
				.setInsets(new Insets(new Extent(0, Extent.PX), new Extent(20,
						Extent.PX), new Extent(0, Extent.PX), new Extent(0,
						Extent.PX)));
		column1.add(row1);
		rwTabla = new Row();
		rwTabla
				.setAlignment(new Alignment(Alignment.CENTER, Alignment.DEFAULT));
		rwTabla.setStyleName("2OpenLabs.Row.Datos");
		column1.add(rwTabla);
	}
}